<?php

namespace app\admin\controller;

use think\Controller;
use think\Request;
use \tp5er\Backup;
use think\Db;
class Dataup extends Common
{   
    protected $db;
    // public function _initialize()
    // {
    //     parent::_initialize();
    //     $config=array(
    //         'path'     => '../Data/',//数据库备份路径
    //         'part'     => 20971520,//数据库备份卷大小
    //         'compress' => 0,//数据库备份文件是否启用压缩 0不压缩 1 压缩
    //         'level'    => 9 //数据库备份文件压缩级别 1普通 4 一般  9最高
    //     );
        
        
    // }
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {   
        $config=array(
            'path'     => '../Data/',//数据库备份路径
            'part'     => 20971520,//数据库备份卷大小
            'compress' => 0,//数据库备份文件是否启用压缩 0不压缩 1 压缩
            'level'    => 9 //数据库备份文件压缩级别 1普通 4 一般  9最高
        );
        $this->db= new Backup($config);
        $this->assign('list',$this->db->dataList());
        return view();
    }
    /**
     * 修复表
     * @return \think\response\Json
     * @throws \Exception
     */
    public function repair(){
        $config=array(
            'path'     => '../Data/',//数据库备份路径
            'part'     => 20971520,//数据库备份卷大小
            'compress' => 0,//数据库备份文件是否启用压缩 0不压缩 1 压缩
            'level'    => 9 //数据库备份文件压缩级别 1普通 4 一般  9最高
        );
        $this->db= new Backup($config);
        if (request()->isAjax()) {
            $tablename=input('post.tablename');
            if (!empty($tablename)) {
                $res=$this->db->repair($tablename);
               
                if ($res[0]['Msg_text']=="OK") {
                    return json(['code'=>1,'msg'=>'修复成功']);
                }
                return json(['code'=>0,'msg'=>'修复失败']);
            }
        }else{
            return json(['code'=>0,'msg'=>'请求异常']);
        }
    }
    /**
     * 优化表
     * @return \think\response\Json
     * @throws \Exception
     */
    public function optimize(){
        $config=array(
            'path'     => '../Data/',//数据库备份路径
            'part'     => 20971520,//数据库备份卷大小
            'compress' => 0,//数据库备份文件是否启用压缩 0不压缩 1 压缩
            'level'    => 9 //数据库备份文件压缩级别 1普通 4 一般  9最高
        );
        $this->db= new Backup($config);
        
        if (request()->isPost()) {
            $tablename=input('tablename');
            if (!empty($tablename)) {
                $res=$this->db->optimize($tablename);
                if ($res[0]['Msg_text']=="OK") {
                    return json(['code'=>1,'msg'=>'优化成功']);
                }
                return json(['code'=>0,'msg'=>'优化失败']);
            }
        }else{
            return json(['code'=>0,'msg'=>'请求异常']);
        }
    }
    /**
     * 批量修复表
     * @return \think\response\Json
     * @throws \Exception
     */
    public function repairAll(){
        if (request()->isPost()) {
            $tables=input('post.tables');
            $tables=explode(',',$tables);
            if (!empty($tables)) {
                foreach ($tables as $v){
                    if (!empty($v)) {
                        $res= $this->db->repair($v);
                    }
                 }
                 if ($res[0]['Msg_text']=="OK") {
                    return json(['code'=>1,'msg'=>'批量修复成功']);
                }
            }
           
            return json(['code'=>0,'msg'=>'修复失败']);
        }else{
            return json(['code'=>0,'msg'=>'请求异常']);
        }
    }
    /**
     * 单表备份
     * @return \think\response\Json
     * @throws \Exception
     */
    public function DbBackup(){
        $config=array(
            'path'     => '../Data/',//数据库备份路径
            'part'     => 20971520,//数据库备份卷大小
            'compress' => 0,//数据库备份文件是否启用压缩 0不压缩 1 压缩
            'level'    => 9 //数据库备份文件压缩级别 1普通 4 一般  9最高
        );
        $this->db= new Backup($config);
        
            if (request()->isPost()) {
                $table=input('name');
                $file=['name'=>date('Ymd-His'),'part'=>1];//备份的文件名，必须严格遵守
                if ($table=="database") {
                    $sql="show tables";//获取数据库中所有表
                   $tables= Db::query($sql);
                   foreach ($tables as $v) {
                    $start= $this->db->setFile($file)->backup($v['Tables_in_tp6cms'], 0);
                   }
                }else{
                    $start= $this->db->setFile($file)->backup($table, 0);
                }
                if ($start==0) {
                    return json(['code'=>1,'msg'=>'备份成功']);
                }
                return json(['code'=>0,'msg'=>'备份失败']);
            } 
            return json(['code'=>0,'msg'=>'操作异常']); 
    }
    /**
     * 备份列表
     * @return \think\response\Json
     * @throws \Exception
     */
    public function backuplist(){
        $table=input('name');
        $list=$this->db->fileList();
        $data=[];
        foreach ($list as $v){
            $res=$this->db->getFile('time',$v['time']);//获取文件名称
            $filename="未知";
            if(isset($res[0])){
                $filename=basename($res[0]);
            }
            $v['filename']=$filename;
            $data[]=$v;
        }
        $this->assign(array(
            'table'=>$table,
            'list'=>$data,
        ));
        return view('importlist');
    }
    /**
     * 删除备份
     * @return \think\response\Json
     * @throws \Exception
     */
    public function del(){
        $table=input('name');
        $time=input('time');
        $res=$this->db->delFile($time);
        if ($res==$time) {
           return json(['code'=>1,'msg'=>'删除成功']);
        }
        return json(['code'=>0,'msg'=>'删除失败']);
    }
    /**
     * 数据还原
     * @return \think\response\Json
     * @throws \Exception
     */
    public function restore(){
        $table=input('name');
        $time=input('time');
        $start=0;
        $start= $this->db->import($start,$time);
        if ($start==0) {
            return json(['code'=>1,'msg'=>'导入成功']);
         }
         return json(['code'=>0,'msg'=>'导入失败']);
    }
    /**
     * 备份下载
     * @return \think\response\Json
     * @throws \Exception
     */
    public function download(){
        $table=input("name");
        $time=input("time");
        $file = $this->db->getFile('time', $time);
        $fileName = $file[0];
        $result=false;
        if(file_exists($fileName)){
            $result= $this->db->downloadFile($time);
        }
        if($result){
           $this->success('下载成功');
        }
        $this->error('下载失败');
    }

    
}
